package bccsp

import "io"

// AES128
type AES128KeyGenOpts struct {
	Temporary bool
}

// AES128
func (opts *AES128KeyGenOpts) Algorithm() string {
	return AES128
}

// AES128
func (opts *AES128KeyGenOpts) Ephemeral() bool {
	return opts.Temporary
}

// AES192
type AES192KeyGenOpts struct {
	Temporary bool
}

// AES192
func (opts *AES192KeyGenOpts) Algorithm() string {
	return AES192
}

// AES192
func (opts *AES192KeyGenOpts) Ephemeral() bool {
	return opts.Temporary
}

// AES256
type AES256KeyGenOpts struct {
	Temporary bool
}

// AES256
func (opts *AES256KeyGenOpts) Algorithm() string {
	return AES256
}

// AES256
func (opts *AES256KeyGenOpts) Ephemeral() bool {
	return opts.Temporary
}

// 使用AES 的CBC模式 PKCS7填充的加密算法
// notice:IV和PRNG都可以为nil。在这种情况下，BCCSP实现应该使用加密安全的PRNG对IV进行采样。
//notice:注意IV或PRNG可以不是nil。
type AESCBCPKCS7ModeOpts struct {
	// IV是底层密码使用的初始化向量。
	// IV的长度必须与Block的块大小相同。
	// 它只在不是nil时生效
	IV []byte
	// PRNG是底层密码使用的PRNG的实例。
	// 它只在不是nil时生效。
	PRNG io.Reader
}
